當 Cluster 上被不同部門或是不同團隊使用時,Kubernetes Cluster 上的資源管理就非常重要了。要如何避免所有資源被單一 container 拿走,要如何根據各個團隊的需求不同提供不同的資源,也是運維人員的一大課題,Kubernetes 提供我們 Resource Quotas 元件讓 Kubernetes 的管理者,不只能限制每個 container 能存取的資源多寡,同時也能透過與 Namespaces 的搭配限制每個團隊能使用的總資源。
若是還不熟悉 Kubernetes 中的 Namespaces 也無須擔心,在明天的學習筆記中將會詳細介紹什麼是 Namespaces。
今天的學習筆記如下:
每一個 container 都可以有屬於它自己的 resource request 與 resource limit,如同在昨天的學習筆記中 介紹到,我們在設定檔中加入 spec.resources.requests.cpu 要求該 container 運行時需要多少 CPU 的資源。而 Kubernetes 也會透過我們設定的 resource request 去決定要將該 Pod 分配到哪個 Node 上
。
我們也可以將 resource request 視為該 Pod 最小需要的資源。
除了 resource request 外,Resource Quotas 也提供了 resource limit,去限制某個 container 最多只能使用的資源。
以 helloworld-deployment.yaml 為例,
apiVersion: apps/v1beta2
kind: Deployment
metadata:
name: helloworld-deployment
spec:
replicas: 2
selector:
matchLabels:
app: helloworld-pod
template:
metadata:
labels:
app: helloworld-pod
spec:
containers:
- name: my-pod
image: zxcvbnius/docker-demo:latest
ports:
- containerPort: 3000
resources:
requests:
cpu: 200m
limits:
cpu: 400m
可以發現,在 spec.resource
的地方多了一個 limits
的欄位,
400m 同等於 400milicpu(milicore)
若是透過 kubectl create
創建 hello-deployment
,可以從 Grafana 發現多了 limit ,
除了可以針對 CPU 與 Memory 等計算資源限制之外,也可以限制
等資源數量上的限制。
如果我們設置的數量超出指定的數量的範圍,Kubernetes 則會回傳 403 FORBIDDEN
提醒我們超出可使用的配置範圍。
Resource Qoutas 在實境場景中可以說是一個不可或缺的設定,避免單一 Pod 使用過多資源而導致其他 Pod 無法正常運行。雖然今天的學習筆記最後沒有時做的部分,但明天的學習筆記中,介紹 Namespaces 的同時,也會與使用到 Resource Quotas。
依舊歡迎大家給予建議與討論,如果能按個讚給些鼓勵也是很開心唷 :)